#include "Threadpool.hpp"

#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>

class MyTask
{
public:
    void process() 
    {
        srand(time(nullptr));
        /* srand(clock()); */
        int number = rand() % 100;
        printf("Mytask::process: produce a number %d\n", number);
        sleep(1);
    }
};

    //Q1: 面试时如果面试官问任务队列能够放多少个任务？
    //A1: 有同学直接回答10个
    //A2: 20000个
    //
    //Q2: QPS, 每秒你希望能处理多少个连接？
    //A2: C10K, 任务队列的数量一定要大于C10K 
    //
    //Q3: 线程池的线程数量有多少个？
    //A1: 有同学直接回答4个
    //A2: 线程数量与CPU的核数有关，一般设计为核数的1-2倍
    //    比如我们当时的服务器的核数是24(32/64)核
    //    可以根据实际的需要进行调整

int main()
{
    wd::Threadpool threadpool(4, 10);
    threadpool.start();

    int cnt = 20;
    while(cnt-- > 0) {
        //主线程中添加任务
        threadpool.addTask(std::bind(&MyTask::process, MyTask()));
        printf("main thread cnt: %d\n", cnt);
    }

    //停止线程池的运行
    threadpool.stop();
    printf("main thread is exiting\n");
    return 0;
}

